﻿#include <iostream>

using namespace std;

static void process(int layer, const char* from, const char* to, const char* relayStation)
{
    if (layer < 1) return;
    if (layer == 1)
    {
        printf("将第1层 由%s移动到%s\n", from, to);
        return;
    }

    process(layer - 1, from, relayStation, to);
    printf("将第%d层 由%s移动到%s\n", layer, from, to);
    process(layer - 1, relayStation, to, from);
}

/**
 * 汉诺塔问题<br></br>
 * 打印n层汉诺塔，从最左边移动到最右边的全部过程。<br></br>
 * 移动的过程中，小盘必须要在大盘的上面
 *
 *
 *      |           |           |
 *      |           |           |
 *      |           |           |
 *     _|_          |           |
 *    __|__         |           |
 *   ___|___        |           |
 *      左          中          右
 *
 *      |           |           |
 *      |           |           |
 *      |           |           |
 *      |           |          _|_
 *      |           |         __|__
 *      |           |        ___|___
 *      左          中          右
 */
int main_Hanoi()
{
    ios::sync_with_stdio(false);
    process(4, "左", "右", "中");
    return 0;
}